package com.aiwiown.snackmq.api;

import com.aiwiown.snackmq.common.message.Message;
import lombok.Getter;
import lombok.ToString;

import java.util.List;

/**
 * Pull 模式拉取结果的封装。
 * 包含拉取到的消息列表和下次拉取建议的起始位点。
 */
@Getter
@ToString
public class PullResult {

    /**
     * 拉取到的消息列表。如果没有新消息，则为空列表。
     */
    private final List<Message> messages;

    /**
     * 下次拉取时建议的起始位点。
     * <p>
     * 在有消息返回时，这是本批次中最后一条消息的位点 + 1。
     * 在没有消息返回时，这是上次已提交的位点 + 1。
     * <p>
     * 用户可以忽略此字段，因为下次调用 pull 时客户端会重新获取最新已提交位点。
     * 它的主要目的是为有状态的用户应用提供参考。
     */
    private final long nextFetchOffset;

    public PullResult(List<Message> messages, long nextFetchOffset) {
        this.messages = messages;
        this.nextFetchOffset = nextFetchOffset;
    }
}